class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
                
      	vector<int> res;
	if (matrix.size() == 0)
		return res;
	if (matrix[0].size() == 0)
		return res;
	int up = 0;
	int down = matrix.size()-1;  //注意，这里设置成size()-1是为了下面的matrix[k][right]访问时不失效  
	int left = 0;
	int right = matrix[0].size()-1;
        while(true)   //注意 left向右移动的时机，是在遍历了一圈的情况下才++的
        {
            if(left>right) return res;
            for(int k=left;k<=right;k++) //向右
            {
                res.push_back(matrix[up][k]);
            }
            up++; ///下一个起点加一下
            if(up>down) return res;
            for(int k=up;k<=down;k++)//向下
            {
                res.push_back(matrix[k][right]);
            }
            right--;
            if(left>right) return res;
            for(int k=right;k>=left;k--)//向左
            {
                res.push_back(matrix[down][k]);
            }
            down--;///下一个起点减一下
            if(up>down) return res;
            for(int k=down;k>=up;k--) ///向右
            {
                res.push_back(matrix[k][left]);
                
            }
            left++;
        }
        
        
        
    }
};